package com.zut.view;

import com.zut.entity.Course;
import com.zut.entity.Teacher;
import com.zut.service.CourseService;
import com.zut.service.TeacherService;
import com.zut.service.impl.CourseServiceImpl;
import com.zut.service.impl.TeacherServiceImpl;

import java.util.*;

/**
 * 教师信息管理的界面类
 */
public class TeacherView {
    private Scanner sc = new Scanner(System.in);

    //创建一个教师业务对象
    private TeacherService ts = new TeacherServiceImpl();

    //创建一个课程业务对象
    private CourseService cs = new CourseServiceImpl();

    //创建一个List变量，用于接收全部教师编号的集合
    private List<String> tids;

    //创建一个List变量，用于接收全部课程编号的集合
    private List<Integer> cids;

    //声明一个接收登录的教师对象的成员变量
    private Teacher teacher;

    /**
     * 有参构造方法
     * @param teacher
     */
    public TeacherView(Teacher teacher) {
        this.teacher = teacher;
    }

    public TeacherView() {
    }

    public void teacherMainPage(){
        while (true){
            System.out.println("********************教师信息管理************************");
            System.out.println("请选择功能:1、添加新教师 2、查询所有教师 3、根据姓名模糊查询 4、根据课程查询 5、修改教授的课程 6、删除教师 0、退出系统");

            //接收输入的选项
            String num = sc.nextLine();

            switch (num){
                case "1":
                    addTeacherPage();
                    break;
                case "2":
                    showAllTeachersPage();
                    break;
                case "3":
                    findTeachersLikeNamePage();
                    break;
                case "4":
                    findTeachersByCnamePage();
                    break;
                case "5":
                    updateTeachCoursePage();
                    break;
                case "6":
                    deleteTeacherPage();
                    break;
                case "0":

                    return;
                default:
                    System.out.println("该功能暂未开放，请重新选择");

            }

        }
    }

    /**
     * 删除教师
     */
    private void deleteTeacherPage() {
        showAllTeachersPage();

        System.out.println("请选择需要删除的教师编号:");
        String tid = sc.nextLine();

        //调用业务方法
        boolean bl = ts.deleteTeacher(tid);
        System.out.println(bl?"删除成功":"删除失败");


    }

    /**
     * 修改教师教授的课程
     */
    private void updateTeachCoursePage() {
        System.out.println("******************修改教授课程界面********************");
        cids = new ArrayList<>();
        //展示所有教师编号
        showAllTeachersPage();


        String tid=null;
        while(true) {
            System.out.println("请输入需要进行课程修改的教师编号:");
            tid = sc.nextLine();
            if (tids.contains(tid)) {
                break;
            }else{
                System.out.println("教师编号不正确，请重新输入");
            }
        }


        //获取所有课程信息
        System.out.println("***********课程信息如下:****************");
        List<Course> list = cs.findAllCourse();
        for (Course course : list) {
            System.out.println("课程编号:"+course.getId()+"\t课程名称:"+course.getCname());
            cids.add(course.getId());
        }

        String cid = null;
        while(true) {
            System.out.println("请输入教授的课程编号:");
            cid = sc.nextLine();

            if(cids.contains(Integer.valueOf(cid))){
               break;
            }else{
                System.out.println("选择的课程不存在");
            }
        }

        //调用业务方法
        ts.updateTeachCourse(tid,cid);

        System.out.println("修改成功");
    }

    /**
     * 根据课程名称模糊查询
     */
    private void findTeachersByCnamePage() {
        System.out.println("**************根据课程名称查询*****************");
        System.out.println("请输入课程名称:");
        String cname = sc.nextLine();

        //调用业务方法
        List<Map<String,Object>> list = ts.findTeachersByCname(cname);

        if(list.size()==0){
            System.out.println("暂无教师信息，请添加");
        }else{

            for (Map<String, Object> map : list) {
                System.out.println("编号:"+map.get("id")+"\t"+map.get("name")+"\t性别:"+map.get("gender")+"\t联系电话:"+map.get("phoneNum")+"\t教授课程:"+map.get("cname"));
            }

        }
    }

    /**
     * 根据名字模糊查询
     */
    private void findTeachersLikeNamePage() {
        System.out.println("****************根据姓名模糊查询*******************");
        System.out.println("请输入姓名:");
        String tname = sc.nextLine();

        //调用业务方法
        List<Map<String,Object>> list = ts.findTeachersLikeName(tname);

        if(list.size()==0){
            System.out.println("暂无教师信息，请添加");
        }else{

            for (Map<String, Object> map : list) {
                System.out.println("编号:"+map.get("id")+"\t"+map.get("name")+"\t性别:"+map.get("gender")+"\t联系电话:"+map.get("phoneNum")+"\t教授课程:"+map.get("cname"));
            }

        }
    }

    /**
     * 全部教师信息
     */
    private void showAllTeachersPage() {

        //创建一个存储教师编号的集合，放入到tids中
        tids = new ArrayList<>();
        System.out.println("******************教师信息如下:*******************");

        //调用查询全部教师的业务方法
        List<Map<String,Object>> list = ts.findAllTeachers();

        //展示
        if(list.size()==0){
            System.out.println("暂无教师信息，请添加");
        }else{

            for (Map<String, Object> map : list) {
                System.out.println("编号:"+map.get("id")+"\t"+map.get("name")+"\t性别:"+map.get("gender")+"\t联系电话:"+map.get("phoneNum")+"\t教授课程:"+map.get("cname"));
                //把所有教师编号在tids集合中备份，方便其它功能使用
                tids.add((String) map.get("id"));
            }

        }


    }

    /**
     * 添加教师信息的界面
     */
    private void addTeacherPage() {
        System.out.println("**************添加教师信息**********************");

        //创建一个教师对象，用于存储教师信息
        Teacher teacher = new Teacher();

        System.out.println("请输入教师姓名:");
        teacher.setName(sc.nextLine());

        //性别
        while(true){
            System.out.println("请输入性别(男/女):");
            String gender = sc.nextLine();

            //判断输入是否正确
            if("男".equals(gender)||"女".equals(gender)){
                teacher.setGender(gender);
                break;
            }else{
                System.out.println("性别输入不正确，请重新输入");
            }
        }

        //电话号码
        while(true){
            System.out.println("请输入手机号码:");
            String telNum = sc.nextLine();

            //判断手机号是否符合规则：正则表达式 ^1[35789][0-9]{9}$
            if(telNum.matches("^1[35789][0-9]{9}$")){
                teacher.setPhoneNum(telNum);
                break;
            }else{
                System.out.println("请输入正确的手机号");
            }

        }

        //地址
        System.out.println("请输入联系地址:");
        teacher.setAddress(sc.nextLine());

        //密码为手机号后六位
        String pwd = teacher.getPhoneNum().substring(5);
        teacher.setPassword(pwd);

        //入职时间
        teacher.setJoinedDate(new Date());

        //调用添加业务方法
        ts.addTeacher(teacher);

        System.out.println("添加成功");

    }


    /**
     * 修改教师密码
     */
    public void updateTeacherPasswordPage() {

        while(true) {
            System.out.println("请输入原密码:");
            String oldPwd = sc.nextLine();

            if(oldPwd.equals(teacher.getPassword())){ //为true

                System.out.println("请输入新密码:");
                String newPwd = sc.nextLine();

                //调用业务方法
                ts.updateTeacherPassword(teacher.getId(),newPwd);
                System.out.println("修改完成");
                return;
            }else{
                System.out.println("原密码错误，请重新输入");
            }

        }
    }

    /**
     * 修改教师手机号
     */
    public void updateTeacherPhoneNumpage() {

        while(true) {
            System.out.println("请输入新的手机号码:");
            String newPhoneNum = sc.nextLine();

            //进行手机号规则校验
            if (newPhoneNum.matches("^1[356789][0-9]{9}$")) {

                //调用修改手机号的业务方法
                ts.updateTeacherPhoneNum(teacher.getId(), newPhoneNum);
                System.out.println("修改完成");
                return;
            } else {
                System.out.println("手机号格式不正确，请重新输入");
            }

        }

    }
}
